package com.chenjiaru.thread.volatility;

import com.chenjiaru.thread.util.ThreadUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

/**
 * volatile关键字使用
 */
@Data
@Slf4j
public class VolatileDemo {


    // 没有使用volatile关键字的，线程2他没有读到线程1修改后的值，使用了volatile就可以读到
//    public static boolean flag = false;
    public volatile static boolean flag = false;


    public static void main(String[] arr) {
        new Thread(() -> {
            ThreadUtil.mySleep(300);
            VolatileDemo.flag = true;
            log.info("flag={}", VolatileDemo.flag);
        }).start();


        new Thread(() -> {
            while (true) {
                if (VolatileDemo.flag) {
                    log.info("flag终于等于true了");
                    break;
                }
            }
        }).start();
    }


}
